// var n;
// exports.PlayerDataMgr = void 0;
// var r;
// var $dataManager = require("./DataManager");
// var $eventManager = require("./EventManager");
// var $tipsManager = require("./TipsManager");
// var $commonUtils = require("./CommonUtils");
// var $timeUtils = require("./TimeUtils");
// var $const_Common = require("./Const_Common");
// var $redPointControl = require("./RedPointControl");
// var $excel = require("./Excel");
// var $gameDataManager = require("./GameDataManager");
// var $gameGlobalVariable = require("./GameGlobalVariable");
// var $evenType = require("./EvenType");
// !(function (e) {
//     e.global = "global";
// })(r || (r = {}));
// var m = function () {
//     this.power = 30;
//     this.maxPower = 30;
//     this.gold = 0;
//     this.diamond = 0;
//     this.equipSaveData = {};
//     this.dressUpArray = [0, 0, 0, 0, 0, 0, -1, -1];
//     this.saveCount = 0;
//     this.nextResetTime = 0;
//     this.lastAddPowerTime = 0;
//     this.addPowerTime = 0;
//     this.videoAddPowerTime = 0;
//     this.guideMap = {};
//     this.guideSendIndex = 0;
//     this.wujincount = 3;
//     this.wujintime = 0;
//     this.saodangcount = 3;
//     this.saodangtime = 0;
//     this.qiandaocount = 0;
//     this.isqiandaocode = 1;
//     this.qiandaotime = 0;
// };
// var v = function () {
//     this.level = 1;
//     this.isUnLock = !1;
//     this.fragments = 0;
// };
// var b = (function (e) {
//     function t() {
//         var t = (null !== e && e.apply(this, arguments)) || this;
//         t._secret_key = "playerData";
//         t.globalData = new m();
//         t.WHITE_NAME_NO_VIDEO = !1;
//         return t;
//     }
//     __extends(t, e);
//     Object.defineProperty(t.prototype, "chapter", {
//         get: function () {
//             return $gameDataManager.GameDataMgr.getNowMaxLevel() || 1;
//         },
//         enumerable: !1,
//         configurable: !0
//     });
//     t.prototype.GetGuideIndexByTaskName = function (e) {
//         if (!this.globalData.guideMap[e]) {
//             this.globalData.guideMap[e] = 0;
//         }
//         return this.globalData.guideMap[e];
//     };
//     t.prototype.SetGuideIndex = function (e, t) {
//         if (!this.globalData.guideMap[e]) {
//             this.globalData.guideMap[e] = 0;
//         }
//         if (t > this.globalData.guideMap[e]) {
//             this.globalData.guideMap[e] = t;
//             this.SaveGlobalData();
//             var o = e;
//             var n = "" + t;
//             switch (e) {
//                 case $const_Common.GuideName.战斗背包:
//                     o = "战斗背包";
//                     n = [
//                         "引导初始1",
//                         "引导拖动水果2",
//                         "引导刷新按钮3",
//                         "引导合成4",
//                         "引导开战6",
//                         "引导词条7",
//                         "引导词条7完结",
//                         "引导格子8",
//                         "引导其他水果9",
//                         "引导结束10",
//                         "引导完结"
//                     ][t];
//                     break;
//                 case $const_Common.GuideName.仓库升级:
//                     o = "仓库升级";
//                     n = ["给固定奖励1", "引导点击仓库水果2", "引导点击升级3", "引导战斗4", "引导完结"][t];
//                     break;
//                 case $const_Common.GuideName.水果上阵:
//                     o = "水果上阵";
//                     n = ["引导对话", "选择水果", "引导穿戴", "引导完结"][t];
//             }
//             var i = o + "_" + n;
//             if (e == $const_Common.GuideName.战斗背包 && t <= this.globalData.guideSendIndex) {
//                 return;
//             }
//             this.globalData.guideSendIndex = t;
//             $commonUtils.default.SendPoint($const_Common.SendPointType.新手引导, i);
//         }
//     };
//     t.prototype.GMSetGuideIndex = function (e, t) {
//         this.globalData.guideMap[e] = t;
//         this.SaveGlobalData();
//     };
//     t.prototype.init = function (e) {
//         if (void 0 === e) {
//             e = null;
//         }
//         console.log("远程数据", e);
//         this.globalData = new m();
//         var t = this.getNowData(r.global, e);
//         this.globalData = __assign(__assign({}, this.globalData), t);
//         this.StartCheckEquip();
//         this.CheckIsTimeToReset();
//         this.OtherCheck();
//         if (!t) {
//             this.PlayerFirstTime();
//         }
//     };
//     t.prototype.getNowData = function (e, t) {
//         var o = null;
//         if (!(t && (o = t[e]))) {
//             o = this._load(e);
//         }
//         return o;
//     };
//     t.prototype.OtherCheck = function () {
//         var e = $excel.Excel.wareHouseControl(1).unLockArray;
//         for (var t = 0; t < e.length; t++) {
//             if (t > this.globalData.dressUpArray.length) {
//                 this.globalData.dressUpArray.push(-1);
//             } else {
//                 this.chapter < e[t]
//                     ? (this.globalData.dressUpArray[t] = -1)
//                     : this.chapter >= e[t] &&
//                       -1 == this.globalData.dressUpArray[t] &&
//                       (this.globalData.dressUpArray[t] = 0);
//             }
//         }
//     };
//     t.prototype.CheckIsTimeToReset = function () {
//         var e = new Date();
//         var t = e.getTime();
//         if (!this.globalData.nextResetTime || t >= this.globalData.nextResetTime) {
//             e.setHours(24, 0, 0, 0);
//             this.globalData.nextResetTime = e.getTime();
//             this.ResetAllByTime();
//         }
//     };
//     t.prototype.ResetAllByTime = function () {
//         this.globalData.addPowerTime = 0;
//         this.globalData.videoAddPowerTime = 0;
//         this.SaveGlobalData();
//     };
//     t.prototype.SaveGlobalData = function () {
//         this._save(r.global, this.globalData);
//     };
//     t.prototype.AddPower = function (e) {
//         this.globalData.power += e;
//         this.ChangeRich();
//     };
//     t.prototype.SubPower = function (e) {
//         if (this.globalData.power < e) {
//             return $tipsManager.TipMgr.showToast("体力不足"), !1;
//         } else {
//             return (
//                 this.globalData.power >= this.globalData.maxPower &&
//                     this.globalData.power - e < this.globalData.maxPower &&
//                     (this.globalData.lastAddPowerTime = new Date().getTime()),
//                 (this.globalData.power -= e),
//                 this.ChangeRich(),
//                 !0
//             );
//         }
//     };
//     t.prototype.AddGold = function (e) {
//         this.globalData.gold += e;
//         this.ChangeRich();
//     };
//     t.prototype.SubGold = function (e) {
//         if (this.globalData.gold < e) {
//             return $tipsManager.TipMgr.showToast("金币不足"), !1;
//         } else {
//             return (this.globalData.gold -= e), this.ChangeRich(), !0;
//         }
//     };
//     t.prototype.AddDiamond = function (e) {
//         this.globalData.diamond += e;
//         this.ChangeRich();
//     };
//     t.prototype.SubDiamond = function (e) {
//         if (this.globalData.diamond < e) {
//             return $tipsManager.TipMgr.showToast("钻石不足"), !1;
//         } else {
//             return (this.globalData.diamond -= e), this.ChangeRich(), !0;
//         }
//     };
//     t.prototype.ChangeRich = function () {
//         this.SaveGlobalData();
//         $eventManager.EventMgr.dispatchEvent($evenType.EVENT_TYPE.Hall_ResetRich);
//     };
//     t.prototype.PlayerFirstTime = function () {
//         var e = this;
//         $excel.Excel.shuiguo_all.forEach(function (t) {
//             if (-1 != t.isShow && t.unLock <= e.chapter) {
//                 e.AddDressUpEquip(t.id);
//             }
//         });
//     };
//     t.prototype.StartCheckEquip = function () {
//         var e = this;
//         var t = !1;
//         $excel.Excel.shuiguo_all.forEach(function (o) {
//             if (!e.globalData.equipSaveData[o.id]) {
//                 e.globalData.equipSaveData[o.id] = new v();
//                 t = !0;
//             }
//             e.globalData.equipSaveData[o.id].isUnLock = e.chapter >= o.unLock;
//         });
//         if (t) {
//             this.SaveGlobalData();
//         }
//     };
//     t.prototype.GameWinCheckUnlock = function () {
//         var e = this;
//         var t = [];
//         var o = !1;
//         var n = this.chapter;
//         $excel.Excel.shuiguo_all.forEach(function (i) {
//             if (!e.globalData.equipSaveData[i.id].isUnLock && n >= i.unLock) {
//                 e.globalData.equipSaveData[i.id].isUnLock = !0;
//                 o = !0;
//                 t.push(i.id);
//             }
//         });
//         if (o) {
//             this.SaveGlobalData();
//             this.OtherCheck();
//         }
//         return t;
//     };
//     Object.defineProperty(t.prototype, "dressUpArray", {
//         get: function () {
//             return this.globalData.dressUpArray;
//         },
//         enumerable: !1,
//         configurable: !0
//     });
//     t.prototype.HallGetEquipIsDressUp = function (e) {
//         return !!$excel.Excel.shuiguo(e) && -1 != this.dressUpArray.indexOf(e);
//     };
//     t.prototype.GetEquipIsDressUp = function (e) {
//         var t = $excel.Excel.shuiguo(e);
//         return !t || -1 != this.dressUpArray.indexOf(e) || -1 == t.isShow;
//     };
//     t.prototype.AddDressUpEquip = function (e, t) {
//         if (void 0 === t) {
//             t = -1;
//         }
//         if (-1 == t) {
//             for (var o = 0; o < this.globalData.dressUpArray.length; o++) {
//                 if (0 == this.globalData.dressUpArray[o]) {
//                     t = o;
//                     break;
//                 }
//             }
//             if (-1 == t) {
//                 return;
//             }
//         }
//         this.globalData.dressUpArray[t] = e;
//         this.SaveGlobalData();
//         $eventManager.EventMgr.dispatchEvent(
//             $evenType.EVENT_TYPE.MainRedPointChange,
//             $redPointControl.RedPointType.upEquip
//         );
//     };
//     t.prototype.RemoveDressUpEquip = function (e, t) {
//         if (void 0 === t) {
//             t = -1;
//         }
//         if (-1 == t) {
//             for (var o = 0; o < this.globalData.dressUpArray.length; o++) {
//                 if (this.globalData.dressUpArray[o] == e) {
//                     t = o;
//                     break;
//                 }
//             }
//             if (-1 == t) {
//                 return;
//             }
//         }
//         this.globalData.dressUpArray[t] = 0;
//         this.SaveGlobalData();
//         $eventManager.EventMgr.dispatchEvent(
//             $evenType.EVENT_TYPE.MainRedPointChange,
//             $redPointControl.RedPointType.upEquip
//         );
//     };
//     t.prototype.AddEquipLevel = function (e) {
//         if (this.globalData.equipSaveData[e] && this.globalData.equipSaveData[e].isUnLock) {
//             this.globalData.equipSaveData[e].level++;
//             this.SaveGlobalData();
//         }
//     };
//     t.prototype.AddEquipFragments = function (e, t) {
//         this.globalData.equipSaveData[e].fragments += t;
//         this.SaveGlobalData();
//         if ($redPointControl.RedPointCtrl.GetRedPointByType($redPointControl.RedPointType.upEquip)) {
//             $eventManager.EventMgr.dispatchEvent(
//                 $evenType.EVENT_TYPE.MainRedPointChange,
//                 $redPointControl.RedPointType.upEquip
//             );
//         }
//     };
//     t.prototype.UseEquipFragments = function (e, t) {
//         if (this.globalData.equipSaveData[e].fragments < t) {
//             return $tipsManager.TipMgr.showToast("碎片不足"), !1;
//         } else {
//             return (this.globalData.equipSaveData[e].fragments -= t), this.SaveGlobalData(), !0;
//         }
//     };
//     t.prototype.GetEquipDataById = function (e) {
//         return this.globalData.equipSaveData[e];
//     };
//     t.prototype.getWuJinCount = function () {
//         this.resetWuJinCount();
//         return this.globalData.wujincount;
//     };
//     t.prototype.subWuJinCount = function (e) {
//         this.globalData.wujincount -= e;
//         this.SaveGlobalData();
//         $eventManager.EventMgr.dispatchEvent($evenType.EVENT_TYPE.GAME_TIAOZHAN_COUNT);
//     };
//     t.prototype.resetWuJinCount = function (e) {
//         if (void 0 === e) {
//             e = !1;
//         }
//         if (0 == this.globalData.wujintime || e) {
//             $gameDataManager.GameDataMgr.cleanTiaoZhanLevel(1);
//             this.globalData.wujincount = $gameGlobalVariable.GameGlobalVariable.wujinmeirifreecount;
//             this.globalData.wujintime = new Date().getTime();
//             this.SaveGlobalData();
//         } else {
//             if (!$timeUtils.default.isSameDay(this.globalData.wujintime, new Date().getTime())) {
//                 this.globalData.wujincount = $gameGlobalVariable.GameGlobalVariable.wujinmeirifreecount;
//                 this.globalData.wujintime = new Date().getTime();
//                 $gameDataManager.GameDataMgr.cleanTiaoZhanLevel(1);
//                 this.SaveGlobalData();
//             }
//         }
//     };
//     t.prototype.getSaoDangCount = function () {
//         this.resetSaoDangCount();
//         return this.globalData.saodangcount;
//     };
//     t.prototype.subSaoDangCount = function (e) {
//         this.globalData.saodangcount -= e;
//         this.SaveGlobalData();
//     };
//     t.prototype.resetSaoDangCount = function () {
//         if (0 == this.globalData.saodangtime) {
//             this.globalData.saodangcount = $gameGlobalVariable.GameGlobalVariable.meirimianfeicount;
//             this.globalData.saodangtime = new Date().getTime();
//             this.SaveGlobalData();
//         } else {
//             if (!$timeUtils.default.isSameDay(this.globalData.saodangtime, new Date().getTime())) {
//                 this.globalData.saodangcount = $gameGlobalVariable.GameGlobalVariable.meirimianfeicount;
//                 this.globalData.saodangtime = new Date().getTime();
//                 this.SaveGlobalData();
//             }
//         }
//     };
//     t.prototype.getQianDaoCount = function () {
//         return this.globalData.qiandaocount;
//     };
//     t.prototype.subQianDaoCount = function (e) {
//         this.globalData.qiandaocount += e;
//         if (this.globalData.qiandaocount > $excel.Excel.shuiguoqiandao_all.size) {
//             this.globalData.qiandaocount = 0;
//         }
//         this.SaveGlobalData();
//         $eventManager.EventMgr.dispatchEvent($evenType.EVENT_TYPE.GAME_QianDao_COUNT);
//     };
//     t.prototype.setQianDaoState = function () {
//         this.globalData.isqiandaocode = 2;
//         this.subQianDaoCount(1);
//         this.globalData.qiandaotime = new Date().getTime();
//         this.SaveGlobalData();
//         $eventManager.EventMgr.dispatchEvent($evenType.EVENT_TYPE.HOME_QIANDAO_UPDATE);
//     };
//     t.prototype.resetData = function () {
//         this._clear();
//     };
//     t.prototype.resetQianDaoCount = function () {
//         if (0 == this.globalData.qiandaotime) {
//             this.globalData.isqiandaocode = 1;
//             this.SaveGlobalData();
//         } else {
//             if (!$timeUtils.default.isSameDay(this.globalData.qiandaotime, new Date().getTime())) {
//                 this.globalData.isqiandaocode = 1;
//                 this.SaveGlobalData();
//             }
//         }
//     };
//     return t;
// })($dataManager.default);
// exports.PlayerDataMgr = b.getInstance();


// import DataManager from "./DataManager";
// import { EventMgrInstance } from "./EventManager";
// import { TipMgrInstance } from "./TipsManager";
// import CommonUtils from "./CommonUtils";
// import TimeUtils from "./TimeUtils";
// import { GuideName, SendPointType } from "./Const_Common";
// import { RedPointCtrlInstance, RedPointType } from "./RedPointControl";
// import { Excel } from "./Excel";
// import { GameDataMgr } from "./GameDataManager";
// import { GameGlobalVariable } from "./GameGlobalVariable";
// import { EVENT_TYPE } from "./EvenType";
// import { LogMgr } from "./LogManager";

// enum GlobalEnum {
//     global = "global"
// }

// class GlobalData {
//     power: number = 30;
//     maxPower: number = 30;
//     gold: number = 0;
//     diamond: number = 0;
//     equipSaveData: Record<string, EquipData> = {};
//     dressUpArray: number[] = [0, 0, 0, 0, 0, 0, -1, -1];
//     saveCount: number = 0;
//     nextResetTime: number = 0;
//     lastAddPowerTime: number = 0;
//     addPowerTime: number = 0;
//     videoAddPowerTime: number = 0;
//     guideMap: Record<string, number> = {};
//     guideSendIndex: number = 0;
//     wujincount: number = 3;
//     wujintime: number = 0;
//     saodangcount: number = 3;
//     saodangtime: number = 0;
//     qiandaocount: number = 0;
//     isqiandaocode: number = 1;
//     qiandaotime: number = 0;
// }

// class EquipData {
//     level: number = 1;
//     isUnLock: boolean = false;
//     fragments: number = 0;
// }

// class PlayerDataManager extends DataManager {
//     protected _secret_key: string = "playerData";
//     public globalData: GlobalData = new GlobalData();
//     public WHITE_NAME_NO_VIDEO: boolean = false;

//     /**
//      * 获取当前章节
//      * @returns 当前章节
//      * 建议方法名: getCurrentChapter
//      */
//     get chapter(): number {
//         return GameDataMgr.getNowMaxLevel() || 1;
//     }

//     /**
//      * 根据任务名称获取引导索引
//      * @param taskName 任务名称
//      * @returns 引导索引
//      * 建议方法名: getGuideIndexByTaskName
//      */
//     GetGuideIndexByTaskName(taskName: string): number {
//         if (!this.globalData.guideMap[taskName]) {
//             this.globalData.guideMap[taskName] = 0;
//         }
//         return this.globalData.guideMap[taskName];
//     }

//     /**
//      * 设置引导索引
//      * @param taskName 任务名称
//      * @param index 引导索引
//      * 建议方法名: setGuideIndex
//      */
//     SetGuideIndex(taskName: string, index: number): void {
//         if (!this.globalData.guideMap[taskName]) {
//             this.globalData.guideMap[taskName] = 0;
//         }
//         if (index > this.globalData.guideMap[taskName]) {
//             this.globalData.guideMap[taskName] = index;
//             this.SaveGlobalData();
//             let guideName = taskName;
//             let guideStep = `${index}`;
//             switch (taskName) {
//                 case GuideName.战斗背包:
//                     guideName = "战斗背包";
//                     guideStep = [
//                         "引导初始1",
//                         "引导拖动水果2",
//                         "引导刷新按钮3",
//                         "引导合成4",
//                         "引导开战6",
//                         "引导词条7",
//                         "引导词条7完结",
//                         "引导格子8",
//                         "引导其他水果9",
//                         "引导结束10",
//                         "引导完结"
//                     ][index];
//                     break;
//                 case GuideName.仓库升级:
//                     guideName = "仓库升级";
//                     guideStep = ["给固定奖励1", "引导点击仓库水果2", "引导点击升级3", "引导战斗4", "引导完结"][index];
//                     break;
//                 case GuideName.水果上阵:
//                     guideName = "水果上阵";
//                     guideStep = ["引导对话", "选择水果", "引导穿戴", "引导完结"][index];
//             }
//             const guidePoint = `${guideName}_${guideStep}`;
//             if (taskName === GuideName.战斗背包 && index <= this.globalData.guideSendIndex) {
//                 return;
//             }
//             this.globalData.guideSendIndex = index;
//             CommonUtils.SendPoint(SendPointType.新手引导, guidePoint);
//         }
//     }

//     /**
//      * GM设置引导索引
//      * @param taskName 任务名称
//      * @param index 引导索引
//      * 建议方法名: gmSetGuideIndex
//      */
//     GMSetGuideIndex(taskName: string, index: number): void {
//         this.globalData.guideMap[taskName] = index;
//         this.SaveGlobalData();
//     }

//     /**
//      * 初始化
//      * @param remoteData 远程数据
//      * 建议方法名: initialize
//      */
//     init(remoteData: any = null): void {
//         console.log("远程数据", remoteData);
//         this.globalData = new GlobalData();
//         const currentData = this.getNowData(GlobalEnum.global, remoteData);
//         this.globalData = { ...this.globalData, ...currentData };
//         console.log("本地数据", this.globalData, currentData);
//         this.StartCheckEquip();
//         this.CheckIsTimeToReset();
//         this.OtherCheck();
//         if (!currentData) {
//             this.PlayerFirstTime();
//         }
//     }

//     /**
//      * 获取当前数据
//      * @param key 键
//      * @param remoteData 远程数据
//      * @returns 当前数据
//      * 建议方法名: getCurrentData
//      */
//     getNowData(key: string, remoteData: any): any {
//         let data = null;
//         if (!(remoteData && (data = remoteData[key]))) {
//             data = this._load(key);
//         }
//         return data;
//     }

//     /**
//      * 其他检查
//      * 建议方法名: performOtherChecks
//      */
//     OtherCheck(): void {
//         const unlockArray = Excel.wareHouseControl(1).unLockArray;
//         for (let i = 0; i < unlockArray.length; i++) {
//             if (i > this.globalData.dressUpArray.length) {
//                 this.globalData.dressUpArray.push(-1);
//             } else {
//                 this.chapter < unlockArray[i]
//                     ? (this.globalData.dressUpArray[i] = -1)
//                     : this.chapter >= unlockArray[i] &&
//                     this.globalData.dressUpArray[i] === -1 &&
//                     (this.globalData.dressUpArray[i] = 0);
//             }
//         }
//     }

//     /**
//      * 检查是否需要重置
//      * 建议方法名: checkIfTimeToReset
//      */
//     CheckIsTimeToReset(): void {
//         const now = new Date().getTime();
//         if (!this.globalData.nextResetTime || now >= this.globalData.nextResetTime) {
//             const nextReset = new Date();
//             nextReset.setHours(24, 0, 0, 0);
//             this.globalData.nextResetTime = nextReset.getTime();
//             this.ResetAllByTime();
//         }
//     }

//     /**
//      * 按时间重置所有数据
//      * 建议方法名: resetAllDataByTime
//      */
//     ResetAllByTime(): void {
//         this.globalData.addPowerTime = 0;
//         this.globalData.videoAddPowerTime = 0;
//         this.SaveGlobalData();
//     }

//     /**
//      * 保存全局数据
//      * 建议方法名: saveGlobalData
//      */
//     SaveGlobalData(): void {
//         console.log("SaveGlobalData 保存数据",GlobalEnum.global, this.globalData);
//         this._save(GlobalEnum.global, this.globalData);
//     }

//     /**
//      * 增加体力
//      * @param amount 增加的体力值
//      * 建议方法名: addPower
//      */
//     AddPower(amount: number): void {
//         this.globalData.power += amount;
//         this.ChangeRich();
//     }

//     /**
//      * 减少体力
//      * @param amount 减少的体力值
//      * @returns 是否成功
//      * 建议方法名: subtractPower
//      */
//     SubPower(amount: number): boolean {
//         if (this.globalData.power < amount) {
//             TipMgrInstance.showToast("体力不足");
//             return false;
//         } else {
//             if (this.globalData.power >= this.globalData.maxPower && this.globalData.power - amount < this.globalData.maxPower) {
//                 this.globalData.lastAddPowerTime = new Date().getTime();
//             }
//             this.globalData.power -= amount;
//             this.ChangeRich();
//             return true;
//         }
//     }

//     /**
//      * 增加金币
//      * @param amount 增加的金币值
//      * 建议方法名: addGold
//      */
//     AddGold(amount: number): void {
//         this.globalData.gold += amount;
//         this.ChangeRich();
//     }

//     /**
//      * 减少金币
//      * @param amount 减少的金币值
//      * @returns 是否成功
//      * 建议方法名: subtractGold
//      */
//     SubGold(amount: number): boolean {
//         if (this.globalData.gold < amount) {
//             TipMgrInstance.showToast("金币不足");
//             return false;
//         } else {
//             this.globalData.gold -= amount;
//             this.ChangeRich();
//             return true;
//         }
//     }

//     /**
//      * 增加钻石
//      * @param amount 增加的钻石值
//      * 建议方法名: addDiamond
//      */
//     AddDiamond(amount: number): void {
//         this.globalData.diamond += amount;
//         this.ChangeRich();
//     }

//     /**
//      * 减少钻石
//      * @param amount 减少的钻石值
//      * @returns 是否成功
//      * 建议方法名: subtractDiamond
//      */
//     SubDiamond(amount: number): boolean {
//         if (this.globalData.diamond < amount) {
//             TipMgrInstance.showToast("钻石不足");
//             return false;
//         } else {
//             this.globalData.diamond -= amount;
//             this.ChangeRich();
//             return true;
//         }
//     }

//     /**
//      * 变更财富
//      * 建议方法名: changeWealth
//      */
//     ChangeRich(): void {
//         this.SaveGlobalData();
//         EventMgrInstance.dispatchEvent(EVENT_TYPE.Hall_ResetRich);
//     }

//     /**
//      * 玩家首次进入游戏
//      * 建议方法名: playerFirstTime
//      */
//     PlayerFirstTime(): void {
//         Excel.shuiguo_all.forEach((item) => {
//             if (item.isShow !== -1 && item.unLock <= this.chapter) {
//                 this.AddDressUpEquip(item.id);
//             }
//         });
//     }

//     /**
//      * 开始检查装备
//      * 建议方法名: startCheckEquip
//      */
//     StartCheckEquip(): void {
//         let hasNewEquip = false;
//         Excel.shuiguo_all.forEach((item) => {
//             if (!this.globalData.equipSaveData[item.id]) {
//                 this.globalData.equipSaveData[item.id] = new EquipData();
//                 hasNewEquip = true;
//             }
//             this.globalData.equipSaveData[item.id].isUnLock = this.chapter >= item.unLock;
//         });
//         if (hasNewEquip) {
//             LogMgr.debug("StartCheckEquip  保存数据")
//             this.SaveGlobalData();
//         }
//     }

//     /**
//      * 游戏胜利后检查解锁
//      * @returns 解锁的装备ID数组
//      * 建议方法名: gameWinCheckUnlock
//      */
//     GameWinCheckUnlock(): number[] {
//         const unlockedEquipIds: number[] = [];
//         let hasNewUnlock = false;
//         const currentChapter = this.chapter;
//         Excel.shuiguo_all.forEach((item) => {
//             if (!this.globalData.equipSaveData[item.id].isUnLock && currentChapter >= item.unLock) {
//                 this.globalData.equipSaveData[item.id].isUnLock = true;
//                 hasNewUnlock = true;
//                 unlockedEquipIds.push(item.id);
//             }
//         });
//         if (hasNewUnlock) {
//             this.SaveGlobalData();
//             this.OtherCheck();
//         }
//         return unlockedEquipIds;
//     }

//     /**
//      * 获取装扮数组
//      * @returns 装扮数组
//      * 建议方法名: getDressUpArray
//      */
//     get dressUpArray(): number[] {
//         return this.globalData.dressUpArray;
//     }

//     /**
//      * 大厅获取装备是否装扮
//      * @param equipId 装备ID
//      * @returns 是否装扮
//      * 建议方法名: hallGetEquipIsDressUp
//      */
//     HallGetEquipIsDressUp(equipId: number): boolean {
//         return !!Excel.shuiguo(equipId) && this.dressUpArray.includes(equipId);
//     }

//     /**
//      * 获取装备是否装扮
//      * @param equipId 装备ID
//      * @returns 是否装扮
//      * 建议方法名: getEquipIsDressUp
//      */
//     GetEquipIsDressUp(equipId: number): boolean {
//         const equipData = Excel.shuiguo(equipId);
//         return !equipData || this.dressUpArray.includes(equipId) || equipData.isShow === -1;
//     }

//     /**
//      * 增加装扮装备
//      * @param equipId 装备ID
//      * @param index 索引
//      * 建议方法名: addDressUpEquip
//      */
//     AddDressUpEquip(equipId: number, index: number = -1): void {
//         if (index === -1) {
//             for (let i = 0; i < this.globalData.dressUpArray.length; i++) {
//                 if (this.globalData.dressUpArray[i] === 0) {
//                     index = i;
//                     break;
//                 }
//             }
//             if (index === -1) {
//                 return;
//             }
//         }
//         this.globalData.dressUpArray[index] = equipId;
//         this.SaveGlobalData();
//         EventMgrInstance.dispatchEvent(
//             EVENT_TYPE.MainRedPointChange,
//             RedPointType.upEquip
//         );
//     }

//     /**
//      * 移除装扮装备
//      * @param equipId 装备ID
//      * @param index 索引
//      * 建议方法名: removeDressUpEquip
//      */
//     RemoveDressUpEquip(equipId: number, index: number = -1): void {
//         if (index === -1) {
//             for (let i = 0; i < this.globalData.dressUpArray.length; i++) {
//                 if (this.globalData.dressUpArray[i] === equipId) {
//                     index = i;
//                     break;
//                 }
//             }
//             if (index === -1) {
//                 return;
//             }
//         }
//         this.globalData.dressUpArray[index] = 0;
//         this.SaveGlobalData();
//         EventMgrInstance.dispatchEvent(
//             EVENT_TYPE.MainRedPointChange,
//             RedPointType.upEquip
//         );
//     }

//     /**
//      * 增加装备等级
//      * @param equipId 装备ID
//      * 建议方法名: addEquipLevel
//      */
//     AddEquipLevel(equipId: number): void {
//         if (this.globalData.equipSaveData[equipId] && this.globalData.equipSaveData[equipId].isUnLock) {
//             this.globalData.equipSaveData[equipId].level++;
//             this.SaveGlobalData();
//         }
//     }

//     /**
//      * 增加装备碎片
//      * @param equipId 装备ID
//      * @param amount 增加的碎片数量
//      * 建议方法名: addEquipFragments
//      */
//     AddEquipFragments(equipId: number, amount: number): void {
//         this.globalData.equipSaveData[equipId].fragments += amount;
//         this.SaveGlobalData();
//         if (RedPointCtrlInstance.GetRedPointByType(RedPointType.upEquip)) {
//             EventMgrInstance.dispatchEvent(
//                 EVENT_TYPE.MainRedPointChange,
//                 RedPointType.upEquip
//             );
//         }
//     }

//     /**
//      * 使用装备碎片
//      * @param equipId 装备ID
//      * @param amount 使用的碎片数量
//      * @returns 是否成功
//      * 建议方法名: useEquipFragments
//      */
//     UseEquipFragments(equipId: number, amount: number): boolean {
//         if (this.globalData.equipSaveData[equipId].fragments < amount) {
//             TipMgrInstance.showToast("碎片不足");
//             return false;
//         } else {
//             this.globalData.equipSaveData[equipId].fragments -= amount;
//             this.SaveGlobalData();
//             return true;
//         }
//     }

//     /**
//      * 根据ID获取装备数据
//      * @param equipId 装备ID
//      * @returns 装备数据
//      * 建议方法名: getEquipDataById
//      */
//     GetEquipDataById(equipId: number): EquipData {
//         return this.globalData.equipSaveData[equipId];
//     }

//     /**
//      * 获取无尽挑战次数
//      * @returns 无尽挑战次数
//      * 建议方法名: getWuJinCount
//      */
//     getWuJinCount(): number {
//         this.resetWuJinCount();
//         return this.globalData.wujincount;
//     }

//     /**
//      * 减少无尽挑战次数
//      * @param amount 减少的次数
//      * 建议方法名: subtractWuJinCount
//      */
//     subWuJinCount(amount: number): void {
//         this.globalData.wujincount -= amount;
//         this.SaveGlobalData();
//         EventMgrInstance.dispatchEvent(EVENT_TYPE.GAME_TIAOZHAN_COUNT);
//     }

//     /**
//      * 重置无尽挑战次数
//      * @param force 是否强制重置
//      * 建议方法名: resetWuJinCount
//      */
//     resetWuJinCount(force: boolean = false): void {
//         if (this.globalData.wujintime === 0 || force) {
//             GameDataMgr.cleanTiaoZhanLevel(1);
//             this.globalData.wujincount = GameGlobalVariable.wujinmeirifreecount;
//             this.globalData.wujintime = new Date().getTime();
//             this.SaveGlobalData();
//         } else {
//             if (!TimeUtils.isSameDay(this.globalData.wujintime, new Date().getTime())) {
//                 this.globalData.wujincount = GameGlobalVariable.wujinmeirifreecount;
//                 this.globalData.wujintime = new Date().getTime();
//                 GameDataMgr.cleanTiaoZhanLevel(1);
//                 this.SaveGlobalData();
//             }
//         }
//     }

//     /**
//      * 获取扫荡次数
//      * @returns 扫荡次数
//      * 建议方法名: getSaoDangCount
//      */
//     getSaoDangCount(): number {
//         this.resetSaoDangCount();
//         return this.globalData.saodangcount;
//     }

//     /**
//      * 减少扫荡次数
//      * @param amount 减少的次数
//      * 建议方法名: subtractSaoDangCount
//      */
//     subSaoDangCount(amount: number): void {
//         this.globalData.saodangcount -= amount;
//         this.SaveGlobalData();
//     }

//     /**
//      * 重置扫荡次数
//      * 建议方法名: resetSaoDangCount
//      */
//     resetSaoDangCount(): void {
//         if (this.globalData.saodangtime === 0) {
//             this.globalData.saodangcount = GameGlobalVariable.meirimianfeicount;
//             this.globalData.saodangtime = new Date().getTime();
//             this.SaveGlobalData();
//         } else {
//             if (!TimeUtils.isSameDay(this.globalData.saodangtime, new Date().getTime())) {
//                 this.globalData.saodangcount = GameGlobalVariable.meirimianfeicount;
//                 this.globalData.saodangtime = new Date().getTime();
//                 this.SaveGlobalData();
//             }
//         }
//     }

//     /**
//      * 获取签到次数
//      * @returns 签到次数
//      * 建议方法名: getQianDaoCount
//      */
//     getQianDaoCount(): number {
//         return this.globalData.qiandaocount;
//     }

//     /**
//      * 增加签到次数
//      * @param amount 增加的次数
//      * 建议方法名: addQianDaoCount
//      */
//     subQianDaoCount(amount: number): void {
//         this.globalData.qiandaocount += amount;
//         if (this.globalData.qiandaocount > Excel.shuiguoqiandao_all.size) {
//             this.globalData.qiandaocount = 0;
//         }
//         this.SaveGlobalData();
//         EventMgrInstance.dispatchEvent(EVENT_TYPE.GAME_QianDao_COUNT);
//     }

//     /**
//      * 设置签到状态
//      * 建议方法名: setQianDaoState
//      */
//     setQianDaoState(): void {
//         this.globalData.isqiandaocode = 2;
//         this.subQianDaoCount(1);
//         this.globalData.qiandaotime = new Date().getTime();
//         this.SaveGlobalData();
//         EventMgrInstance.dispatchEvent(EVENT_TYPE.HOME_QIANDAO_UPDATE);
//     }

//     /**
//      * 重置数据
//      * 建议方法名: resetData
//      */
//     resetData(): void {
//         this._clear();
//     }

//     /**
//      * 重置签到次数
//      * 建议方法名: resetQianDaoCount
//      */
//     resetQianDaoCount(): void {
//         if (this.globalData.qiandaotime === 0) {
//             this.globalData.isqiandaocode = 1;
//             this.SaveGlobalData();
//         } else {
//             if (!TimeUtils.isSameDay(this.globalData.qiandaotime, new Date().getTime())) {
//                 this.globalData.isqiandaocode = 1;
//                 this.SaveGlobalData();
//             }
//         }
//     }
// }

// export const PlayerDataMgr = PlayerDataManager.getInstance();


import { GuideName } from "./Const_Common";
import DataManager from "./DataManager";
import { EventMgrInstance } from "./EventManager";
import { EVENT_TYPE } from "./EvenType";
import { Excel } from "./Excel";
import { GameDataMgr } from "./GameDataManager";
import { GameGlobalVariable } from "./GameGlobalVariable";
import { LogMgr } from "./LogManager";
import { RedPointCtrl, RedPointType } from "./RedPointControl";
import TimeUtils from "./TimeUtils";
import { TipMgr } from "./TipsManager";

/**
 * 建议类名: GlobalEnumType
 */
enum GlobalEnum {
    global = "global"
}

/**
 * 建议类名: GlobalDataType
 */
class GlobalData {
    power: number = 30;
    maxPower: number = 30;
    gold: number = 0;
    diamond: number = 0;
    equipSaveData: Record<string, EquipData> = {};
    dressUpArray: number[] = [0, 0, 0, 0, 0, 0, -1, -1];
    saveCount: number = 0;
    nextResetTime: number = 0;
    lastAddPowerTime: number = 0;
    addPowerTime: number = 0;
    videoAddPowerTime: number = 0;
    guideMap: Record<string, number> = {};
    guideSendIndex: number = 0;
    wujincount: number = 3;
    wujintime: number = 0;
    saodangcount: number = 3;
    saodangtime: number = 0;
    qiandaocount: number = 0;
    isqiandaocode: number = 1;
    qiandaotime: number = 0;
}

/**
 * 建议类名: EquipDataType
 */
class EquipData {
    level: number = 1;
    isUnLock: boolean = false;
    fragments: number = 0;
}

/**
  * 建议类名: PlayerDataManagerType
  */
class PlayerDataManager extends DataManager {
    protected _secret_key: string = "playerData";
    public globalData: GlobalData = new GlobalData();
    public WHITE_NAME_NO_VIDEO: boolean = false;
    public OPEN_GM: boolean = true;

    /**
     * 获取当前章节
     * @returns 当前章节
     * 建议方法名: getCurrentChapter
     */
    get chapter(): number {
        return GameDataMgr.getCurrentMaxLevel() || 1;
    }

    /**
     * 根据任务名称获取引导索引
     * @param taskName 任务名称
     * @returns 引导索引
     * 建议方法名: getGuideIndexByTaskName
     */
    getGuideIndexByTaskName(taskName: string): number {
        const { guideMap } = this.globalData;
        if (!guideMap[taskName]) {
            guideMap[taskName] = 0;
        }
        return guideMap[taskName];
    }

    /**
     * 设置引导索引
     * @param taskName 任务名称
     * @param index 引导索引
     * 建议方法名: setGuideIndex
     */
    setGuideIndex(taskName: string, index: number): void {
        const { guideMap, guideSendIndex } = this.globalData;
        if (!guideMap[taskName]) {
            guideMap[taskName] = 0;
        }
        if (index > guideMap[taskName]) {
            guideMap[taskName] = index;
            this.saveGlobalData();
            let guideName = taskName;
            let guideStep = `${index}`;
            switch (taskName) {
                case GuideName.GameBag:
                    guideName = "战斗背包";
                    guideStep = [
                        "引导初始1",
                        "引导拖动水果2",
                        "引导刷新按钮3",
                        "引导合成4",
                        "引导开战6",
                        "引导词条7",
                        "引导词条7完结",
                        "引导格子8",
                        "引导其他水果9",
                        "引导结束10",
                        "引导完结"
                    ][index];
                    break;
                case GuideName.EquipLevelUp:
                    guideName = "仓库升级";
                    guideStep = ["给固定奖励1", "引导点击仓库水果2", "引导点击升级3", "引导战斗4", "引导完结"][index];
                    break;
                case GuideName.FruitDressUpEquip:
                    guideName = "水果上阵";
                    guideStep = ["引导对话", "选择水果", "引导穿戴", "引导完结"][index];
            }
            const guidePoint = `${guideName}_${guideStep}`;
            if (taskName === GuideName.GameBag && index <= guideSendIndex) {
                return;
            }
            this.globalData.guideSendIndex = index;
            // CommonUtils.sendTrackingEvent(SendPointType.NewUserGuide, guidePoint);
        }
    }

    /**
     * GM设置引导索引
     * @param taskName 任务名称
     * @param index 引导索引
     * 建议方法名: gmSetGuideIndex
     */
    gmSetGuideIndex(taskName: string, index: number): void {
        this.globalData.guideMap[taskName] = index;
        this.saveGlobalData();
    }

    /**
     * 初始化
     * @param remoteData 远程数据
     * 建议方法名: initialize
     */
    initialize(remoteData: any = null): void {
        console.log("远程数据", remoteData);
        this.globalData = new GlobalData();
        const currentData = this.getCurrentData(GlobalEnum.global, remoteData);
        this.globalData = { ...this.globalData, ...currentData };
        console.log("本地数据", this.globalData, currentData);
        this.startCheckEquip();
        this.checkIfTimeToReset();
        this.performOtherChecks();
        if (!currentData) {
            this.playerFirstTime();
        }
    }

    /**
     * 获取当前数据
     * @param key 键
     * @param remoteData 远程数据
     * @returns 当前数据
     * 建议方法名: getCurrentData
     */
    getCurrentData(key: string, remoteData: any): any {
        let data = null;
        if (!(remoteData && (data = remoteData[key]))) {
            data = this._load(key);
        }
        return data;
    }

    /**
     * 其他检查
     * 建议方法名: performOtherChecks
     */
    performOtherChecks(): void {
        const unlockArray = Excel.wareHouseControl(1).unLockArray;
        const { dressUpArray } = this.globalData;
        unlockArray.forEach((unlockLevel, i) => {
            if (i >= dressUpArray.length) {
                this.globalData.dressUpArray.push(-1);
            } else {
                this.chapter < unlockLevel
                    ? this.globalData.dressUpArray[i] = -1
                    : this.chapter >= unlockLevel && dressUpArray[i] === -1 && (dressUpArray[i] = 0);
            }
        });
    }

    /**
     * 检查是否需要重置
     * 建议方法名: checkIfTimeToReset
     */
    checkIfTimeToReset(): void {
        const now = Date.now();
        if (!this.globalData.nextResetTime || now >= this.globalData.nextResetTime) {
            const nextReset = new Date();
            nextReset.setHours(24, 0, 0, 0);
            this.globalData.nextResetTime = nextReset.getTime();
            this.resetAllDataByTime();
        }
    }

    /**
     * 按时间重置所有数据
     * 建议方法名: resetAllDataByTime
     */
    resetAllDataByTime(): void {
        this.globalData.addPowerTime = 0;
        this.globalData.videoAddPowerTime = 0;
        this.saveGlobalData();
    }

    /**
     * 保存全局数据
     * 建议方法名: saveGlobalData
     */
    saveGlobalData(): void {
        //console.log("SaveGlobalData 保存数据", GlobalEnum.global, this.globalData);
        this._save(GlobalEnum.global, this.globalData);
    }

    /**
     * 增加体力
     * @param amount 增加的体力值
     * 建议方法名: addPower
     */
    addPower(amount: number): void {
        this.globalData.power += amount;
        this.changeWealth();
    }

    /**
     * 减少体力
     * @param amount 减少的体力值
     * @returns 是否成功
     * 建议方法名: subtractPower
     */
    subtractPower(amount: number): boolean {
        if (this.globalData.power < amount) {
            TipMgr.showToast("体力不足");
            return false;
        } else {
            if (this.globalData.power >= this.globalData.maxPower && this.globalData.power - amount < this.globalData.maxPower) {
                this.globalData.lastAddPowerTime = Date.now();
            }
            this.globalData.power -= amount;
            this.changeWealth();
            return true;
        }
    }

    /**
     * 增加金币
     * @param amount 增加的金币值
     * 建议方法名: addGold
     */
    addGold(amount: number): void {
        this.globalData.gold += amount;
        this.changeWealth();
    }

    /**
     * 减少金币
     * @param amount 减少的金币值
     * @returns 是否成功
     * 建议方法名: subtractGold
     */
    subtractGold(amount: number): boolean {
        if (this.globalData.gold < amount) {
            TipMgr.showToast("金币不足");
            return false;
        } else {
            this.globalData.gold -= amount;
            this.changeWealth();
            return true;
        }
    }

    /**
     * 增加钻石
     * @param amount 增加的钻石值
     * 建议方法名: addDiamond
     */
    addDiamond(amount: number): void {
        this.globalData.diamond += amount;
        this.changeWealth();
    }

    /**
     * 减少钻石
     * @param amount 减少的钻石值
     * @returns 是否成功
     * 建议方法名: subtractDiamond
     */
    subtractDiamond(amount: number): boolean {
        if (this.globalData.diamond < amount) {
            TipMgr.showToast("钻石不足");
            return false;
        } else {
            this.globalData.diamond -= amount;
            this.changeWealth();
            return true;
        }
    }

    /**
     * 变更财富
     * 建议方法名: changeWealth
     */
    changeWealth(): void {
        this.saveGlobalData();
        EventMgrInstance.emitEvent(EVENT_TYPE.Hall_ResetRich);
    }

    /**
     * 玩家首次进入游戏
     * 建议方法名: playerFirstTime
     */
    playerFirstTime(): void {
        const currentChapter = this.chapter;
        Excel.shuiguo_all.forEach((item) => {
            if (item.isShow !== -1 && item.unLock <= currentChapter) {
                this.addDressUpEquip(item.id);
            }
        });
    }

    /**
     * 开始检查装备
     * 建议方法名: startCheckEquip
     */
    startCheckEquip(): void {
        let hasNewEquip = false;
        const currentChapter = this.chapter;
        Excel.shuiguo_all.forEach((item) => {
            if (!this.globalData.equipSaveData[item.id]) {
                this.globalData.equipSaveData[item.id] = new EquipData();
                hasNewEquip = true;
            }
            this.globalData.equipSaveData[item.id].isUnLock = currentChapter >= item.unLock;
        });
        if (hasNewEquip) {
            LogMgr.debug("StartCheckEquip 保存数据")
            this.saveGlobalData();
        }
    }

    /**
     * 游戏胜利后检查解锁
     * @returns 解锁的装备ID数组
     * 建议方法名: gameWinCheckUnlock
     */
    gameWinCheckUnlock(): number[] {
        const unlockedEquipIds: number[] = [];
        let hasNewUnlock = false;
        const currentChapter = this.chapter;
        Excel.shuiguo_all.forEach((item) => {
            if (!this.globalData.equipSaveData[item.id].isUnLock && currentChapter >= item.unLock) {
                this.globalData.equipSaveData[item.id].isUnLock = true;
                hasNewUnlock = true;
                unlockedEquipIds.push(item.id);
            }
        });
        if (hasNewUnlock) {
            this.saveGlobalData();
            this.performOtherChecks();
        }
        return unlockedEquipIds;
    }

    /**
     * 获取装扮数组
     * @returns 装扮数组
     * 建议方法名: getDressUpArray
     */
    get dressUpArray(): number[] {
        return this.globalData.dressUpArray;
    }

    /**
     * 大厅获取装备是否装扮
     * @param equipId 装备ID
     * @returns 是否装扮
     * 建议方法名: hallGetEquipIsDressUp
     */
    hallGetEquipIsDressUp(equipId: number): boolean {
        const equipData = Excel.shuiguo(equipId);
        return !!equipData && this.dressUpArray.includes(equipId);
    }

    /**
     * 获取装备是否装扮
     * @param equipId 装备ID
     * @returns 是否装扮
     * 建议方法名: getEquipIsDressUp
     */
    getEquipIsDressUp(equipId: number): boolean {
        const equipData = Excel.shuiguo(equipId);
        return !equipData || this.dressUpArray.includes(equipId) || equipData.isShow === -1;
    }

    /**
     * 增加装扮装备
     * @param equipId 装备ID
     * @param index 索引
     * 建议方法名: addDressUpEquip
     */
    addDressUpEquip(equipId: number, index: number = -1): void {
        const { dressUpArray } = this.globalData;
        if (index === -1) {
            for (let i = 0; i < dressUpArray.length; i++) {
                if (dressUpArray[i] === 0) {
                    index = i;
                    break;
                }
            }
            if (index === -1) {
                return;
            }
        }
        dressUpArray[index] = equipId;
        this.saveGlobalData();
        EventMgrInstance.emitEvent(
            EVENT_TYPE.MainRedPointChange,
            RedPointType.upEquip
        );
    }

    /**
     * 移除装扮装备
     * @param equipId 装备ID
     * @param index 索引
     * 建议方法名: removeDressUpEquip
     */
    removeDressUpEquip(equipId: number, index: number = -1): void {
        const { dressUpArray } = this.globalData;
        if (index === -1) {
            for (let i = 0; i < dressUpArray.length; i++) {
                if (dressUpArray[i] === equipId) {
                    index = i;
                    break;
                }
            }
            if (index === -1) {
                return;
            }
        }
        dressUpArray[index] = 0;
        this.saveGlobalData();
        EventMgrInstance.emitEvent(
            EVENT_TYPE.MainRedPointChange,
            RedPointType.upEquip
        );
    }

    /**
     * 增加装备等级
     * @param equipId 装备ID
     * 建议方法名: addEquipLevel
     */
    addEquipLevel(equipId: number): void {
        const equipData = this.globalData.equipSaveData[equipId];
        if (equipData && equipData.isUnLock) {
            equipData.level++;
            this.saveGlobalData();
        }
    }

    /**
     * 增加装备碎片
     * @param equipId 装备ID
     * @param amount 增加的碎片数量
     * 建议方法名: addEquipFragments
     */
    addEquipFragments(equipId: number, amount: number): void {
        const equipData = this.globalData.equipSaveData[equipId];
        equipData.fragments += amount;
        this.saveGlobalData();
        if (RedPointCtrl.getRedPointStatusByType(RedPointType.upEquip)) {
            EventMgrInstance.emitEvent(
                EVENT_TYPE.MainRedPointChange,
                RedPointType.upEquip
            );
        }
    }

    /**
     * 使用装备碎片
     * @param equipId 装备ID
     * @param amount 使用的碎片数量
     * @returns 是否成功
     * 建议方法名: useEquipFragments
     */
    useEquipFragments(equipId: number, amount: number): boolean {
        const equipData = this.globalData.equipSaveData[equipId];
        if (equipData.fragments < amount) {
            TipMgr.showToast("碎片不足");
            return false;
        } else {
            equipData.fragments -= amount;
            this.saveGlobalData();
            return true;
        }
    }

    /**
     * 根据ID获取装备数据
     * @param equipId 装备ID
     * @returns 装备数据
     * 建议方法名: getEquipDataById
     */
    getEquipDataById(equipId: number): EquipData {
        return this.globalData.equipSaveData[equipId];
    }

    /**
     * 获取无尽挑战次数
     * @returns 无尽挑战次数
     * 建议方法名: getWuJinCount
     */
    getWuJinCount(): number {
        this.resetWuJinCount();
        return this.globalData.wujincount;
    }

    /**
     * 减少无尽挑战次数
     * @param amount 减少的次数
     * 建议方法名: subtractWuJinCount
     */
    subtractWuJinCount(amount: number): void {
        this.globalData.wujincount -= amount;
        this.saveGlobalData();
        EventMgrInstance.emitEvent(EVENT_TYPE.GAME_TIAOZHAN_COUNT);
    }

    /**
     * 重置无尽挑战次数
     * @param force 是否强制重置
     * 建议方法名: resetWuJinCount
     */
    resetWuJinCount(force: boolean = false): void {
        const { wujintime } = this.globalData;
        // If it's the first time or forced reset, reset the WuJinCount
        if (wujintime === 0 || force) {
            GameDataMgr.clearChallengeLevel(1);
            this.globalData.wujincount = GameGlobalVariable.wujinmeirifreecount;
            this.globalData.wujintime = Date.now();
            this.saveGlobalData();
        } else {
            if (!TimeUtils.areTimestampsOnSameDay(wujintime, Date.now())) {
                // If it's a new day, reset the WuJinCount
                this.globalData.wujincount = GameGlobalVariable.wujinmeirifreecount;
                this.globalData.wujintime = Date.now();
                GameDataMgr.clearChallengeLevel(1);
                this.saveGlobalData();
            }
        }
    }

    /**
     * 获取扫荡次数
     * @returns 扫荡次数
     * 建议方法名: getSaoDangCount
     */
    getSaoDangCount(): number {
        this.resetSaoDangCount();
        return this.globalData.saodangcount;
    }

    /**
     * 减少扫荡次数
     * @param amount 减少的次数
     * 建议方法名: subtractSaoDangCount
     */
    subSaoDangCount(amount: number): void {
        this.globalData.saodangcount -= amount;
        this.saveGlobalData();
    }

    /**
     * 重置扫荡次数
     * 建议方法名: resetSaoDangCount
     */
    resetSaoDangCount(): void {
        const { saodangtime } = this.globalData;
        if (saodangtime === 0) {
            this.globalData.saodangcount = GameGlobalVariable.meirimianfeicount;
            this.globalData.saodangtime = Date.now();
            this.saveGlobalData();
        } else {
            if (!TimeUtils.areTimestampsOnSameDay(saodangtime, Date.now())) {
                this.globalData.saodangcount = GameGlobalVariable.meirimianfeicount;
                this.globalData.saodangtime = Date.now();
                this.saveGlobalData();
            }
        }
    }

    /**
     * 获取签到次数
     * @returns 签到次数
     * 建议方法名: getQianDaoCount
     */
    getQianDaoCount(): number {
        return this.globalData.qiandaocount;
    }

    /**
     * 增加签到次数
     * @param amount 增加的次数
     * 建议方法名: addQianDaoCount
     */
    addQianDaoCount(amount: number): void {
        this.globalData.qiandaocount += amount;
        if (this.globalData.qiandaocount > Excel.shuiguoqiandao_all.size) {
            this.globalData.qiandaocount = 0;
        }
        this.saveGlobalData();
        EventMgrInstance.emitEvent(EVENT_TYPE.GAME_QianDao_COUNT);
    }

    /**
     * 设置签到状态
     * 建议方法名: setQianDaoState
     */
    setQianDaoState(): void {
        this.globalData.isqiandaocode = 2;
        this.addQianDaoCount(1);
        this.globalData.qiandaotime = Date.now();
        this.saveGlobalData();
        EventMgrInstance.emitEvent(EVENT_TYPE.HOME_QIANDAO_UPDATE);
    }

    /**
     * 重置数据
     * 建议方法名: resetData
     */
    resetData(): void {
        this._clear();
    }

    /**
     * 重置签到次数
     * 建议方法名: resetQianDaoCount
     */
    resetQianDaoCount(): void {
        const { qiandaotime } = this.globalData;
        if (qiandaotime === 0) {
            this.globalData.isqiandaocode = 1;
            this.saveGlobalData();
        } else {
            if (!TimeUtils.areTimestampsOnSameDay(qiandaotime, Date.now())) {
                this.globalData.isqiandaocode = 1;
                this.saveGlobalData();
            }
        }
    }
}

// Export PlayerDataMgr as a singleton instance
export const PlayerDataMgr = PlayerDataManager.getInstance();

